Cookie和Sesion
保存会话的两种技术
- Cookie
- 客户端技术
- 把用户信息写给用户浏览器,浏览器保存
- Session
- 服务器技术,利用这个技术,可以保存用户的会话信息,可以把信息和数据放在Session中
- 保存重要的信息,减少服务器资源的浪费
1. Cookie
1.1. 操作Cookie的方法
- 从请求中获取Cookie信息
- 服务器响应给客户端Cookie
Cookie[] cookies = req.getCookies(); // 获得Cookie
cookie.getName(); // 获得Cookie中的key
cookie.getValue(); // 获得Cookie中的vlaue
Cookie cookie = new Cookie("lastLoginTime", System.currentTimeMillis() + ""); // 新建一个Cookie
cookie.setMaxAge(24 * 60 * 60); // 设置Cookie的有效期
resp.addCookie(cookie); // 响应给客户端一个Cookie
1.2. Cookie细节问题
- 一个Cookie只能保存一个信息
- 一个web网站可以给浏览器发送多个Cookie,最多能存放20个Cookie
- Cookie的大小限制为4KB
- 浏览器上限为300个Cookie
1.3. 删除Cookie的方法
- 不设置有效期,默认为关闭浏览器自动失效
- 设置新的Cookie替代,并设置有效期时间为0
1.4. 编码问题
URLEncoder.encode(str,"utf-8")
URLDecoder.decode(str,"UTF-8")
2. Session
- 服务器会给每一个用户(浏览器)创建一个Session对象。
一个Session独占一个浏览器,只要浏览器没有关闭,Session就存在。
用途:保存用户信息,保存购物车信息,整个网站中经常会使用的数据等。
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 解决乱码问题
req.setCharacterEncoding("UTF-8");
resp.setCharacterEncoding("UTF-8");
resp.setContentType("text/html;charset=utf-8");
// 得到Session
HttpSession session = req.getSession();
// 往Session中存放数据
session.setAttribute("name", new Person("admin", 1));
// 获取Session的ID
String sessionId = session.getId();
//判断Session是不是新创建
if (session.isNew()){
resp.getWriter().write("session创建成功,ID:"+sessionId);
}else {
resp.getWriter().write("session以及在服务器中存在了,ID:"+sessionId);
}
// Session创建的时候做了什么事情;
// Cookie cookie = new Cookie("JSESSIONID",sessionId);
// resp.addCookie(cookie);
}
// 得到Session
HttpSession session = req.getSession();
Person person = (Person) session.getAttribute("name");
System.out.println(person.toString());
// 移除Session
session.removeAttribute("name");
// 手动注销Session
session.invalidate();
2.1. 在web.xml中配置Session自动过期
<!--设置Session默认的失效时间-->
<session-config>
<!--15分钟后Session自动失效,以分钟为单位-->
<session-timeout>15</session-timeout>
</session-config>